// workermi.cpp -- working class methods with MI
//#include "test_0301.h"
//#include <iostream>
//using std::cout;
//using std::cin;
//using std::endl;
//// Worker methods
//Worker::~Worker() {}
//
//// proteced methods
//void Worker::Data() const
//{
//	cout << "Name: " << fullname << endl;
//	cout << "Employee ID: " << id << endl;
//}
//
//void Worker::Get()
//{
//	getline(cin, fullname);
//	cout << "Enter worker's ID: ";
//	cin >> id;
//	while (cin.get() != '\n')
//	{
//		continue;
//	}
//}
//
//// Waiter methods
//void Waiter::Set()
//{
//	cout << "Enter waiter's name: ";
//	Worker::Get();
//	Get();
//}
//
//void Waiter::Show() const
//{
//	cout << "Gategory: waiter\n";
//	Worker::Data();
//	Data();
//}
//
//// protected methods
//void Waiter::Data() const
//{
//	cout << "Panache rating: " << panache << endl;
//}
//
//void Waiter::Get()
//{
//	cout << "Enter waiter's panache rating: ";
//	cin >> panache;
//	while (cin.get() != '\n')
//	{
//		continue;
//	}
//}
//
//// Singer methods
//const char* Singer::pv[Singer::Vtypes] = { "other", "alto", "contralo",
//		"soprano", "bass", "baritone", "tenor" };
//
//void Singer::Set()
//{
//	cout << "Enter singer's name: ";
//	Worker::Get();
//	Get();
//}
//
//void Singer::Show() const
//{
//	cout << "Category: singer\n";
//	Worker::Data();
//	Data();
//}
//
//// protected methods
//void Singer::Data() const
//{
//	cout << "Vocal range: " << pv[voice] << endl;
//}
//
//void Singer::Get()
//{
//	cout << "Enter number for singer's vocal range:\n";
//	int i;
//	for (i = 0; i < Vtypes; i++)
//	{
//		cout << i << ": " << pv[i] << "  ";
//		if (i % 4 ==3)
//		{
//			cout << endl;
//		}
//	}
//	if (i % 4 != 0)
//	{
//		cout << "\n";
//	}
//	cin >> voice;
//	while (cin.get() != '\n')
//	{
//		continue;
//	}
//}
//
//// SingingWaiter methods
//void SingingWaiter::Data() const
//{
//	Singer::Data();
//	Waiter::Data();
//}
//
//void SingingWaiter::Get()
//{
//	Waiter::Get();
//	Singer::Get();
//}
//
//void SingingWaiter::Set()
//{
//	cout << "Enter sing waiter's name: ";
//	Worker::Get();
//	Get();
//}
//
//void SingingWaiter::Show() const
//{
//	cout << "Categort: singing waiter\n";
//	Worker::Data();
//	Data();
//}
//
//// workmi.cpp -- multiple inheritance
//// compile with workermi.cpp
//#include <cstring>
//
//const int SIZE = 5;
//
//int main()
//{
//	using std::strchr;
//
//	Worker* lolas[SIZE];
//
//	int ct;
//	for (ct = 0; ct < SIZE; ct++)
//	{
//		char choice;
//		cout << "Enter the employee category:\n"
//			<< "w: waiter  s: singer  "
//			<< "t: singing waiter  q: quit\n";
//		cin >> choice;
//		while (strchr("wstq", choice) == NULL)
//		{
//			cout << "Please enter a w, s, t, or q: ";
//			cin >> choice;
//		}
//		if (choice == 'q')
//		{
//			break;
//		}
//		switch (choice)
//		{
//		case 'w': lolas[ct] = new Waiter;
//			break;
//		case 's': lolas[ct] = new Singer;
//			break;
//		case 't': lolas[ct] = new SingingWaiter;
//			break;
//		}
//		cin.get();
//		lolas[ct]->Set();
//	}
//
//	cout << "\nHere is your staff:\n";
//
//	int i;
//	for (i = 0; i < ct; i++)
//	{
//		cout << endl;
//		lolas[i]->Show();
//	}
//	for (i = 0; i < ct; i++)
//	{
//		delete lolas[i];
//	}
//	cout << "Bye.\n";
//
//	return 0;
//}

// stacktem.cpp -- testing the template stack class
//#include <iostream>
//#include <string>
//#include <cctype>
//#include "test_0301.h"
//
//using std::cin;
//using std::cout;
//
//int main()
//{
//	Stack<std::string> st;		// create an empty stack
//	char ch;
//	std::string po;
//	cout << "Please enter A to add a purchase order,\n"
//		<< "P to process a PO, or Q to quit.\n";
//	while (cin >> ch && std::toupper(ch) != '\Q')
//	{
//		while (cin.get() != '\n')
//		{
//			continue;
//		}
//		if (!std::isalpha(ch))
//		{
//			cout << '\a';
//			continue;
//		}
//		switch (ch)
//		{
//		case 'A':
//		case 'a':
//			cout << "Enter a PO number to add: ";
//			cin >> po;
//			if (st.isfull())
//			{
//				cout << "stack a already full\n";
//			}
//			else
//			{
//				st.push(po);
//			}
//			break;
//		case 'P':
//		case 'p':
//			if (st.isempty())
//			{
//				cout << "stack already empty\n";
//			}
//			else
//			{
//				st.pop(po);
//				cout << "PO #" << po << " popped\n";
//			}
//			break;
//		}
//		cout << "Please enter A to add a purchase order,\n"
//			<< "P to process a PO, or Q to quit.\n";
//	}
//	cout << "Bye\n";
//	return 0;
//}

// stkoptr1.cpp -- testing stack of pointers
//#include <iostream>
//#include <cstdlib>		// for rand(), srand()
//#include <ctime>		// for time()
//#include "test_0301.h"
//
//const int Num = 10;
//int main()
//{
//	std::srand(std::time(0));	// randomize rand()
//	std::cout << "Please enter stack size: ";
//	int stacksize;
//	std::cin >> stacksize;
//// create an empty stack with stacksize slots
//	Stack<const char*>st(stacksize);
//
//// in basket
//	const char* in[Num] = {
//		" 1: Hank Gilgamesh", " 2: Kiki Ishtar",
//		" 3: Betty Rocker", " 4: Ian Flagranti",
//		" 5: Wolfgang Kibble", " 6: Portia Koop",
//		" 7: Joy Almondo", " 8: Xaverie Paprika",
//		" 9: Juan Moore", " 10: Misha Mache"
//	};
//
//// out basket
//	const char* out[Num];
//
//	int processed = 0;
//	int nextin = 0;
//	while (processed < Num)
//	{
//		if (st.isempty())
//		{
//			st.push(in[nextin++]);
//		}
//		else if (st.isfull())
//		{
//			st.pop(out[processed++]);
//		}
//		else if (std::rand() % 2 && nextin < Num)	// 50-50 chance
//		{
//			st.push(in[nextin++]);
//		}
//		else
//		{
//			st.pop(out[processed++]);
//		}
//	}
//	for (int i = 0; i < Num; i++)
//	{
//		std::cout << out[i] << std::endl;
//	}
//
//	std::cout << "Bye\n";
//
//	return 0;
//}

// twod.cpp -- making a 2-d array
//#include <iostream>
//#include "test_0307.h"
//
//int main(void)
//{
//	using std::cout;
//	using std::endl;
//	ArrayTP<int, 10> sums;
//	ArrayTP<double, 10> aves;
//	ArrayTP< ArrayTP<int, 5>, 10 > twodee;
//
//	int i, j;
//
//	for (i = 0; i < 10; i++)
//	{
//		sums[i] = 0;
//		for (j = 0; j < 5; j++)
//		{
//			twodee[i][j] = (i + 1) * (j + 1);
//			sums[i] += twodee[i][j];
//		}
//		aves[i] = (double)sums[i] / 10;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			cout.width(2);
//			cout << twodee[i][j] << ' ';
//		}
//		cout << ": sum = ";
//		cout.width(3);
//		cout << sums[i] << ", average = " << aves[i] << endl;
//	}
//
//	cout << "Done.\n";
//
//	return 0;
//}